跳到主要内容

借助Google Guava 学习发现和开发通用功能模块

Google Guava 介绍

Google Guava 是 Google 公司内部 Java 开发工具库的 开源版本。Google 内部的很多 Java 项目堵在使用它。它提供了一些 JDK 没有提供的功能,以及对 JDK 现有功能的增强功能。其中就包括: 集合(Collections)、缓存(Caching) 、原生类型支持(Primitives Support)、并发库(Concurrency Libraries)、通用注解(Common Annotation)、字符串处理(Strings Processing)、数学计算(Math)、I/O、事件总线(EventBus)等等。

如何发现通用的功能模块

很多人角色做业务开发没有挑战,实际上,做业务开发也会涉及很多非业务功能的开发,比如 ID 生成器、性能计数器、EventBus、DI 容器、限流框架、幂等框架、灰度组件。关键在于,我们要有善于发现、善于抽象的能力,并且具有扎实的设计、开发的能力,能够发现这些非业务的、可复用的功能特点,并且从业务逻辑中将其解耦抽象出来,设计并开发成独立的功能模块。

在业务开发中,跟业务无关的通用功能模块。常见的一般有三类:类库(library)、框架(framework)、功能组件(component)等。

其中,Google Guava 属于类库,提 供一组 API 接口。EventBus 、DI 容器属于框架,提供骨架代码,能让业务人员聚焦在业务开发部分,在预留的扩展点里填充业务代码。ID 生成器、性能计数器属于功能组件,提供一组具有某一特殊功能的 API 接口,有点类似类库,但更加聚焦和重量级,比如,ID 生成器有可能会一俩 Redis 等外部系统,不像类库那么简单。

限流、幂等、灰度、到底是框架还是功能组件,要视情况而定。如果业务代码嵌套在他们里面开发,那么就可以称之为框架。如果只是开发 API 接口,供业务系统调用,就可以称它们为组件。

那么如何发现项目中的通用的功能模块呢?

实际上,不管是类库、框架还是功能组件,这些通用功能模块有两个最大的特点: 复用和业务无关。Google Guava 就是一个典型的例子。

如果没有复用场景,那也就没有了抽离出来,设计成独立模块的必要了。如果与业务有关又可复用,大部分情况下会设计成独立的系统(比如微服务),而不是类库、框架或者功能组件。

所以 ,如果你开发的代码,与业务无关并且可能会 被复用,那就可以考虑将它独立出来,开发成类库、框架、功能组件等通用功能模块。

除了业务开发团队之外,很多公司还有一些基础架构团队、架构开发团队,他们除了开发类库、框架、功能组件之外,也会开发一些通用的系统、中间件,比如,Google MapReduce、Kafka 消息中间件、监控系统、分布式调用链路追踪系统等。

如何开发通用的功能模块

作为通用的类库、框架、功能组件,我们希望开发出来之后,不仅仅是自己项目使用,还能用在其他团队的项目中,甚至可以开源出来给更多人使用,这样才能发挥它更大的价值。

所以,对于这些类库、框架、功能组件的开发,不能闭门造车,要把它当作产品来开发。这个产品是一个技术产品,目标用户是程序员,解决的是他们的开发痛点。我们要多换位思考,站在用户的角度,来想他们到底需要什么样的功能。

对于一个技术产品来说,尽管 bug 少,性能好等技术指标至关重要,但是否易用、易集成、易插拔、文档是否齐全、是否容易上手等,这些产品素质也非常重要,甚至能起到决定性作用。往往就是这些很容易忽视、不被重视的东西,会决定一个技术产品是否在众多的同类中脱颖而出。

具体到 Google Guava ,它是一个开发类库,目标用户是 Java 开发工程师,解决用户主要痛点是,相对于 JDK ,提供更多的工具类,简化代码编写